package com.kevin.action;

import com.kevin.model.Book;
import com.kevin.service.BookService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.apache.struts2.rest.HttpHeaders;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class BookController extends BaseRestController {

    /**
     * 封装 id 请求参数的属性
     */
    private int id;
    private Book book = new Book();
    private List<Book> list;


    /**
     * 定义业务逻辑组件
     */
    private BookService bookService = new BookService();


    /**
     * 处理不带 id 参数的 GET 请求
     * 进入首页
     *
     * @return
     */
    public HttpHeaders index() throws IOException {
        System.out.println("index");
        System.out.println(id);
        System.out.println(book);
        list = bookService.getAll();
        return new DefaultHttpHeaders("success")
                .disableCaching();
    }

    public HttpHeaders list()throws IOException{
        HttpServletResponse response = ServletActionContext.getResponse();
        String jsonString = "{\"name\":\"hello\",\"age\":12}";
        response.setContentType("application/json");
        response.getWriter().write(jsonString);
        return null;
    }



    /**
     * 处理不带 id 参数的 GET 请求
     * 进入添加新图书。
     *
     * @return
     */
    public String editNew() {
        // 创建一个新图书
        System.out.println("editNew");

        book = new Book();
        return "editNew";
    }

    /**
     * 处理不带 id 参数的 POST 请求
     * 保存新图书
     *
     * @return
     */
    public HttpHeaders create() {
        // 保存图书
        System.out.println("create");

        bookService.saveOrUpdate(book);
        addActionMessage("添加图书成功");
        return new DefaultHttpHeaders("success")
                .setLocationId(book.getId());
    }


    /**
     * 处理带 id 参数的 GET 请求
     * 显示指定图书
     *
     * @return
     */
    public HttpHeaders show() {
        System.out.println("show");
        System.out.println(id);
        System.out.println(book);
        return new DefaultHttpHeaders("show");
    }

    /**
     * 处理带 id 参数、且指定操作 edit 资源的 GET 请求
     * 进入编辑页面 (book-edit.jsp)
     *
     * @return
     */
    public String edit() {
        System.out.println("edit");
        System.out.println(id);
        System.out.println(book);
        return "edit";
    }


    /**
     * 处理带 id 参数的 PUT 请求
     * 修改图书
     *
     * @return
     */
    public String update() {
        System.out.println("update");

        bookService.saveOrUpdate(book);
        addActionMessage("图书编辑成功！");
        return "success";
    }


    /**
     * 处理带 id 参数，且指定操作 deleteConfirm 资源的方法
     * 进入删除页面 (book-deleteConfirm.jsp)
     *
     * @return
     */
    public String deleteConfirm() {
        System.out.println("deleteConfirm");
        System.out.println(id);
        System.out.println(book);
        return "success";
    }


    /**
     * 处理带 id 参数的 DELETE 请求
     * 删除图书
     *
     * @return
     */
    public String destroy() {

        System.out.println("destroy");

        bookService.remove(id);
        addActionMessage("成功删除 ID 为" + id + "的图书！");
        return "success";
    }


    /**
     * 实现 ModelDriven 接口必须实现的 getModel 方法
     *
     * @return
     */
    @Override
    public Object getModel() {
        return (list != null ? list : book);
    }


    /**
     * 获取 id 请求参数的方法
     *
     * @param id
     */
    public void setId(int id) {
        this.id = id;
        // 取得方法时顺带初始化 model 对象
        if (id > 0) {
            this.book = bookService.get(id);
        }
    }

    public int getId() {
        return this.id;
    }

}
